#============================================
# 「Canister」 -  2020-9-12 00:34
# @author: Apprentice Zhang
#============================================

class_name Canister
extends SkillBase

# 添加节点的类型
enum ADD_TYPE {
	MAIN,		# 添加到当前游戏场景中
	HOST		# 添加到「宿主」节点上
}


export (ADD_TYPE) var add_mode = ADD_TYPE.MAIN		# 添加节点的方式
export (PackedScene) var bullet						# 子弹的类型
export (int, 1, 10000) var launches_num = 1			# 发射次数
export (float) var launches_interval = 0.2			# 每次发射间隔时间
export (int, 1, 10000) var add_num = 8				# 每次添加的个数，也就是发射的个数
export (float) var angular_start = -30				# 开始发射的节点角度
export (float) var angular_end = 30					# 发射结束的节点的角度


func cast_skill():
	if bullet == null:
		return
	
	.cast_skill()	#调用父级的这个方法，加上这个等于是对继承的父级脚本的方法进行了增强，不加这个等于是重写了这个方法
	for i in range(launches_num):
		# 间隔时间启动「发射」技能
		get_timer_once(i * launches_interval, self, 'launches')


func launches() -> void:
	"""发射"""
	for i in range(add_num):
		var b = bullet.instance() as Node2D
		match add_mode:
			ADD_TYPE.HOST:
				_get_host_node().add_child(b)		# 添加到宿主的节点下
			ADD_TYPE.MAIN:
				get_tree().current_scene.add_child(b)	# 添加到当前游戏主场景中
		
		# 最开始时的角度
		b.global_rotation = _get_host_node().global_rotation
		# 角度偏移
		b.global_rotation += deg2rad(lerp(angular_start, angular_end, float(i) / add_num-1))
		# 子弹的位置为技能的「宿主」的位置
		b.global_position = _get_host_node().global_position
